package de.projectgoodmorning.alarm;

import java.io.IOException;
import java.io.OutputStream;
import java.text.DecimalFormat;

import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.IBinder;
import android.util.Log;

/**
 * Die Klasse GatewayConnection ermoeglicht es einen Farbwert an das Gateway
 * zu senden. Die Klasse baut selbst eine Verbindung zum Bluetooth-Service auf.
 */
public class GatewayConnection {
	private static final String TAG = GatewayConnection.class.getName();
	
	/**
	 * sendet die uebergebenen Farbwerte an das aktuell
	 * gekoppelte Geraet via Bluetooth.
	 * 
	 * @param red		erwartet den Rotwert zwischen 0-255
	 * @param green		erwartet den Gruenwert zwischen 0-255
	 * @param blue		erwartet den Blauwert zwischen 0-255
	 */
	public static void send( Context context, int red, int green, int blue ) {
		context.startService( new Intent( context, BTController.class ) );
		context.bindService( new Intent( context, BTController.class ), 
				btServiceConnection, Context.BIND_AUTO_CREATE );
		
		if( btController != null && btController.isConnected() ) {
			OutputStream outputStream = btController.getOutputStream();
			DecimalFormat decimalFormat = new DecimalFormat  ( "000" );
			String command = 	"color" + 
								decimalFormat.format( red ) +
								decimalFormat.format( green ) +
								decimalFormat.format( blue ) +
								"\n";

			try {
				outputStream.write( command.getBytes( "ASCII" ) );
				outputStream.flush();
			} catch( IOException e ) {
				Log.e( TAG, "Connection error: " + e.getMessage() );
			}
		} else {
			Log.d( TAG, "Not connected, no commando send" );
		}
	}
	
	private static BTController btController;
	private static ServiceConnection btServiceConnection = new ServiceConnection() {
		@Override
		public void onServiceDisconnected( ComponentName name ) {
			btController = null;
			Log.d( TAG, "BTController disconnected" );
		}
		@Override
		public void onServiceConnected( ComponentName name, IBinder service ) {
			btController = ( ( BTController.LocalBinder ) service ).getService();
			
			if( btController != null ) {
				Log.d( TAG, "BTController connected" );
			} else {
				Log.w( TAG, "BTController could not connected" );
			}
		}
	};
}
